package com.silence.gankio.util

import android.app.Activity
import android.bluetooth.BluetoothA2dp
import android.bluetooth.BluetoothAdapter
import android.bluetooth.BluetoothDevice
import android.content.Intent
import com.xuexiang.rxutil2.logs.RxLog

class BluetoothUtil {

    private val mBluetoothAdapter by lazy { BluetoothAdapter.getDefaultAdapter() }

    /**
     * 设备是否支持蓝牙  true为支持
     * @return
     */
    private fun isSupportBlue(): Boolean {
        return mBluetoothAdapter != null
    }

    fun getBluetoothAdapter(): BluetoothAdapter {
        return mBluetoothAdapter
    }

    /**
     * 蓝牙是否打开   true为打开
     * @return
     */
    fun isBlueEnable(): Boolean {
        return isSupportBlue() and mBluetoothAdapter.isEnabled
    }

    /**
     * 自动打开蓝牙（异步：蓝牙不会立刻就处于开启状态）
     * 这个方法打开蓝牙不会弹出提示
     */
    fun openBlueAsyn() {
        if (isSupportBlue()) {
            mBluetoothAdapter.enable()
        }
    }

    /**
     * 自动打开蓝牙（同步）
     * 这个方法打开蓝牙会弹出提示
     * 需要在onActivityResult 方法中判断resultCode == RESULT_OK  true为成功
     */
    fun openBlueSync(activity: Activity, requestCode: Int) {
        val intent = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)
        activity.startActivityForResult(intent, requestCode)
    }

    /**
     * 扫描的方法 返回true 扫描成功
     * 通过接收广播获取扫描到的设备
     * @return
     */
    fun scanBlue(): Boolean {
        if (!isBlueEnable()) {
            RxLog.e("Bluetooth not enable!")
            return false
        }
        //当前是否在扫描，如果是就取消当前的扫描，重新扫描
        if (mBluetoothAdapter.isDiscovering) {
            mBluetoothAdapter.cancelDiscovery()
        }
        //此方法是个异步操作，一般搜索12秒
        return mBluetoothAdapter.startDiscovery()
    }

    /**
     * 取消扫描蓝牙
     * @return  true 为取消成功
     */
    fun cancelScanBule(): Boolean {
        if (isSupportBlue()) {
            return mBluetoothAdapter.cancelDiscovery()
        }
        return true
    }

    /**
     * 获取已配对蓝牙列表
     */
    fun getBondedDevices(): MutableSet<BluetoothDevice>? {
        if (isBlueEnable()) {
            return mBluetoothAdapter.bondedDevices
        }
        return null
    }

}